package main

import (
	"fmt"
)

func main() {
	var score = 100
	// switch后是一个表达式(即:常量值、变量、一个有返回值的函数等都可以)
	// case后面的值如果是常量值(字面量)，则要求不能重复
	// case后的各个值的数据类型，必须和 switch 的表达式数据类型一致
	// case后面可以带多个值，使用逗号间隔。
	// case后面不需要带break 
	// default语句不是必须的，位置也是随意的
	// switch穿透，利用fallthrough关键字，如果在case语句块后增加fallthrough ,则会继续执行下一个case,也叫switch穿透。
	switch score % 8 {
		case 1: fmt.Println("A")
		case 2: fmt.Println("B")
		case 3: fmt.Println("C")
		case 4: 
			fmt.Println("D")
			fallthrough
		case 5: fmt.Println("E")
		case 6: fmt.Println("F")
		case 7, 8, 9: fmt.Println("G")
		case 0: fmt.Println("J")
		default: fmt.Println("Z")
	}
	
	// switch后也可以不带表达式，当做if分支来使用
	switch {
		case score >= 50: fmt.Println("A")
		case score >= 30: fmt.Println("B")
	}

	// switch后也可以直接声明/定义一个变量，分号结束，不推荐

	switch age := 18; {
		case age >= 18: fmt.Println("A")
		case age < 18: fmt.Println("B")
	}
}